﻿///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область СлужебныйПрограммныйИнтерфейс

// Результат проверки МЧД для подписания.
// 
// Параметры:
//  Доверенность - СправочникСсылка.МашиночитаемыеДоверенности
//  Сертификат - ДвоичныеДанные
//             - Строка - адрес двоичных данных сертификата во временном хранилище.
//             - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования.
//
// Возвращаемое значение:
//  Неопределено, Структура:
//   * Ключ - Строка - идентификатор проверки "ПроверкаПодписанта", "ПроверкаДоверенности"
//   * Значение - см. РезультатПроверкиДляПротокола
//
Функция РезультатПроверкиМЧДДляПодписания(Доверенность, Сертификат) Экспорт
	
	Если ТипЗнч(Доверенность) <> Тип("СправочникСсылка.МашиночитаемыеДоверенности") Тогда
		Возврат Неопределено;
	КонецЕсли;

	Возврат МашиночитаемыеДоверенностиФНССлужебныйВызовСервера.РезультатПроверкиМЧДДляПодписания(
		Доверенность, Сертификат);

КонецФункции

// Результат проверки подписи по МЧД.
// 
// Параметры:
//  Доверенность - СправочникСсылка.МашиночитаемыеДоверенности
//  ПодписанныйОбъект - ОпределяемыйТип.ПодписанныйОбъект
//  Сертификат - ДвоичныеДанные
//             - Строка - адрес двоичных данных сертификата во временном хранилище.
//             - СправочникСсылка.СертификатыКлючейЭлектроннойПодписиИШифрования.
//  НаДату - Дата
//  ГотовыеПроверки - Структура:
//   * Ключ - Строка - идентификатор проверки "ПроверкаПодписанта", "ПроверкаДоверенности"
//   * Значение - см. РезультатПроверкиДляПротокола
//
// Возвращаемое значение:
//  Неопределено, Соответствие -  результат проверки МЧДДля подписания
//
Функция РезультатПроверкиПодписиПоМЧД(Доверенность, ПодписанныйОбъект, Сертификат, НаДату = Неопределено, ГотовыеПроверки = Неопределено) Экспорт
	
	Если ТипЗнч(Доверенность) <> Тип("СправочникСсылка.МашиночитаемыеДоверенности") Тогда
		Возврат Неопределено;
	КонецЕсли;

	Возврат МашиночитаемыеДоверенностиФНССлужебныйВызовСервера.РезультатПроверкиПодписиПоМЧД(
		Доверенность, ПодписанныйОбъект, Сертификат, НаДату, ГотовыеПроверки);

КонецФункции

Процедура ДобавитьОтметкуДоверенностьВерна(Форма, ИмяЭлемента) Экспорт
	
	РезультатПроверкиПодписиПоМЧД =  Форма.РезультатПроверкиПодписиПоМЧД;
	
	ИндексРезультата = Число(СтрЗаменить(ИмяЭлемента, "Подключаемый_КомандаОтметитьВручную", ""));
	РезультатПроверки = ПолучитьИзВременногоХранилища(РезультатПроверкиПодписиПоМЧД);
	
	Результат = РезультатПроверки[ИндексРезультата];
	
	Результат.ТребуетсяПроверка = Ложь;
	Результат.Верна = Истина;
	Результат.СтатусВернаУстановленВручную = Истина;
	Результат.УстановившийСтатусВерна = ПользователиКлиент.ТекущийПользователь();
	Результат.ДатаПроверки = ОбщегоНазначенияКлиент.ДатаСеанса();
	ПоместитьВоВременноеХранилище(РезультатПроверки, РезультатПроверкиПодписиПоМЧД);
	
	Форма.Элементы["КартинкаПроверкиПроверкаДокумента" + ИндексРезультата].Картинка = БиблиотекаКартинок.ПроверкаСертификатаУспех;
	Форма.Элементы["КартинкаПроверкиПроверкаПолномочий" + ИндексРезультата].Картинка = БиблиотекаКартинок.ПроверкаСертификатаУспех;
	Форма.Элементы["ОтметитьВручную" + ИндексРезультата].Видимость = Ложь;
	
	Оповестить("ИзмененРезультатПроверкиМЧД", РезультатПроверкиПодписиПоМЧД, Форма.ПодписанныйОбъект);
	
КонецПроцедуры

Процедура ПриОбработкеНавигационнойСсылкиОшибкиПроверкиПодписи(Форма, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) Экспорт
	
	СтандартнаяОбработка = Ложь;
	
	Если ЗначениеЗаполнено(НавигационнаяСсылкаФорматированнойСтроки) Тогда
		
		Ошибка = Новый Структура;
		Ошибка.Вставить("ОписаниеОшибки", НавигационнаяСсылкаФорматированнойСтроки);
		
		ЭлектроннаяПодписьСлужебныйКлиент.ПоказатьОшибкуОбращенияКПрограмме(
			НСтр("ru='Проверка доверенности подписи'"), "", Ошибка, Новый Структура);
	КонецЕсли;
	
КонецПроцедуры

Функция ИнформацияМЧД(РезультатПроверкиПодписиПоМЧД) Экспорт
	
	РезультатПроверки = ПолучитьИзВременногоХранилища(РезультатПроверкиПодписиПоМЧД);
	Верна = Истина;
	Массив = Новый Массив;
	
	Для Каждого Результат Из РезультатПроверки Цикл // см. МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РезультатПроверкиПодписиПоМЧД
		
		Проверка = "";
		МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.ТекстПроверкиМЧД(Результат, Верна, Проверка);
		
		Массив.Добавить(СтроковыеФункцииКлиент.ФорматированнаяСтрока(НСтр("ru = '%1 <a href=%2>%3</a>'"),
			Проверка,
			ПолучитьНавигационнуюСсылку(Результат.МашиночитаемаяДоверенность),
			Результат.Представление));
		Массив.Добавить(Символы.ПС);

	КонецЦикла;
	
	СвойстваСтроки = Новый Структура;
	СвойстваСтроки.Вставить("МашиночитаемаяДоверенность", Новый ФорматированнаяСтрока(Массив));
	СвойстваСтроки.Вставить("МашиночитаемаяДоверенностьВерна", Верна);
	Возврат СвойстваСтроки;
	
КонецФункции

// См. СтандартныеПодсистемыКлиент.ПриПолученииСерверногоОповещения
Процедура ПриПолученииСерверногоОповещения(ИмяОповещения, Результат) Экспорт
	
	Если ИмяОповещения <> "СтандартныеПодсистемы.МашиночитаемыеДоверенности" Тогда
		Возврат;
	КонецЕсли;

	Если Результат.ИмяСобытия = "ПриИзмененииСтатусаДоверенности" Тогда
		МашиночитаемыеДоверенностиФНСКлиентПереопределяемый.ПриИзмененииСтатусаДоверенности(Результат.Контекст);
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция ПараметрыФормыВводаРеквизитов(Ссылка, Реквизиты, ТолькоПросмотр, РедактированиеТаблицы = Ложь, Представитель = Истина) Экспорт
	
	Структура = Новый Структура;
	Структура.Вставить("ТолькоПросмотр", ТолькоПросмотр);
	Структура.Вставить("Ссылка", Ссылка);
	Структура.Вставить("Реквизиты", Реквизиты);
	Структура.Вставить("Представители", Новый Массив);
	Структура.Вставить("РедактированиеТаблицы", РедактированиеТаблицы);
	Структура.Вставить("Поле");
	Структура.Вставить("ПоказыватьПерсональныеДанные", Истина);
	
	Если Представитель Тогда
		Структура.Вставить("ТипУчастникаМЧД", ПредопределенноеЗначение("Перечисление.ТипыУчастниковМЧД.Представитель"));
	Иначе
		Структура.Вставить("ТипУчастникаМЧД", ПредопределенноеЗначение("Перечисление.ТипыУчастниковМЧД.Доверитель"));
	КонецЕсли;
	
	Возврат Структура;
	
КонецФункции

Процедура ОткрытьФормуВводаРеквизитов(Форма, ПараметрыФормы, ОписаниеОповещения = Неопределено) Экспорт
	
	ЭтоФизическоеЛицо = ПараметрыФормы.Реквизиты.ЭтоФизическоеЛицо;
	
	Если ЭтоФизическоеЛицо Тогда
		
		ОткрытьФорму(
			"Справочник.МашиночитаемыеДоверенности.Форма.СведенияОФизическомЛице",
			ПараметрыФормы,
			Форма,,,,
			ОписаниеОповещения,
			РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
		
	Иначе
		
		ПараметрыФормы.Вставить("УникальныйИдентификаторВладельца", Форма.УникальныйИдентификатор);
		
		ОткрытьФорму(
			"Справочник.МашиночитаемыеДоверенности.Форма.СведенияОбОрганизации",
			ПараметрыФормы,
			Форма,,,,
			ОписаниеОповещения,
			РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
		
	КонецЕсли;
	
КонецПроцедуры

Функция РезультатОбработкиОшибкиВзаимодействияРР()
	Возврат Новый Структура("Ошибка");
КонецФункции

Функция ПараметрыРасширенногоПредставленияОшибки()
	Параметры = Новый Структура;
	Параметры.Вставить("ЗаголовокПредупреждения", "");
	Параметры.Вставить("ТекстОшибкиКлиент", "");
	Параметры.Вставить("ДополнительныеДанные", Новый Структура);
	Параметры.Вставить("ОписаниеОшибки", "");
	Параметры.Вставить("ПоказатьИнструкцию", Ложь);
	Параметры.Вставить("ПоказатьПереходКНастройкеПрограмм", Ложь);
	Параметры.Вставить("ПоказатьТребуетсяПомощь", Ложь);
	Параметры.Вставить("ПоказатьУстановкуРасширения", Ложь);
	Параметры.Вставить("ТекстОшибкиСервер", "");
	Параметры.Вставить("ТекстОшибки", "");
	Параметры.Вставить("ИнформацияДляПоддержки", "");
	Возврат Параметры;
КонецФункции

Процедура ПродолжитьВыгрузкуДоверенностиВФайл(РезультатДиалога = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
	
	Если РезультатДиалога = Неопределено Тогда
		Возврат;
	КонецЕсли;
		
	ДляНалоговыхОрганов = РезультатДиалога.Значение;
	ФайлыДоверенностей = МашиночитаемыеДоверенностиФНССлужебныйВызовСервера.ФайлыДоверенностей(ДополнительныеПараметры.Доверенности, ДляНалоговыхОрганов);
	
	СохраняемыеФайлы = Новый Массив;
	Для Каждого Доверенность Из ДополнительныеПараметры.Доверенности Цикл
		ФайлыДоверенности = ФайлыДоверенностей[Доверенность];
		СохраняемыеФайлыДоверенности = Новый Массив;
		БылиОшибки = Ложь;
		Для Каждого Файл Из ФайлыДоверенности Цикл
			Если ЗначениеЗаполнено(Файл.ОписаниеОшибки) Тогда
				ОбщегоНазначенияКлиент.СообщитьПользователю(Файл.ОписаниеОшибки);
				БылиОшибки = Истина;
				Продолжить;
			КонецЕсли;
			ОписаниеПередаваемогоФайла = Новый ОписаниеПередаваемогоФайла(Файл.ИмяФайла, ПоместитьВоВременноеХранилище(Файл.ДвоичныеДанные, Новый УникальныйИдентификатор));
			СохраняемыеФайлыДоверенности.Добавить(ОписаниеПередаваемогоФайла);
		КонецЦикла;
		
		Если Не БылиОшибки И ЗначениеЗаполнено(СохраняемыеФайлыДоверенности) Тогда
			ОбщегоНазначенияКлиентСервер.ДополнитьМассив(СохраняемыеФайлы, СохраняемыеФайлыДоверенности);
		КонецЕсли;
	КонецЦикла; 
	
	Если ЗначениеЗаполнено(СохраняемыеФайлы) Тогда
		ОписаниеОповещения = Новый ОписаниеОповещения("ПриСохраненииВФайлы", ЭтотОбъект);
		ФайловаяСистемаКлиент.СохранитьФайлы(ОписаниеОповещения, СохраняемыеФайлыДоверенности);
	КонецЕсли;
	
КонецПроцедуры

Процедура ПриСохраненииВФайлы(ПолученныеФайлы, ДополнительныеПараметры) Экспорт
	
	Если Не ЗначениеЗаполнено(ПолученныеФайлы) Тогда
		Возврат;
	КонецЕсли;
	
	ОписаниеПередаваемогоФайла = ПолученныеФайлы[0]; // ОписаниеПередаваемогоФайла
	Файл = Новый Файл(ОписаниеПередаваемогоФайла.ПолноеИмя);
	
	ПоказатьОповещениеПользователя(
		НСтр("ru = 'Выгрузка завершена'"),
		"file://" + Файл.Путь,
		Файл.Путь,
		БиблиотекаКартинок.Информация32,
		СтатусОповещенияПользователя.Информация);
	
КонецПроцедуры

// Обработать ошибку взаимодействия РР.
// 
// Параметры:
//  Ошибка - см. ЭлектроннаяПодписьСлужебныйПовтИсп.КлассификаторОшибокКриптографии
//  Контекст - см. МашиночитаемыеДоверенностиФНССлужебныйКлиент.КонтекстДляОбработкиОшибкиРР
//
Процедура ОбработатьОшибкуВзаимодействияРР(Ошибка, Контекст) Экспорт
	
	Если Контекст.ОповещениеОЗавершении <> Неопределено Тогда
		
		Результат = РезультатОбработкиОшибкиВзаимодействияРР();
		Результат.Ошибка = Ошибка;
		ВыполнитьОбработкуОповещения(Контекст.ОповещениеОЗавершении, Результат);
		
	Иначе
		
		ПараметрыФормы = ПараметрыРасширенногоПредставленияОшибки();
		ПараметрыФормы.ЗаголовокПредупреждения = Контекст.ЗаголовокПредупреждения;
		ПараметрыФормы.ТекстОшибки = Ошибка.ТекстОшибки;
		ПараметрыФормы.ОписаниеОшибки = Ошибка.Решение;
		ПараметрыФормы.ПоказатьТребуетсяПомощь = Истина;
		ПараметрыФормы.ПоказатьИнструкцию = Истина; 
		ПараметрыФормы.ИнформацияДляПоддержки = СтроковыеФункцииКлиент.ФорматированнаяСтрока(
			НСтр("ru = 'Обратитесь в службу поддержки фирмы ""1С"", предоставив <a href = %1>техническую информацию о возникшей проблеме</a>'"),
				"ТехническаяИнформация");
		
		ПараметрыФормы.ДополнительныеДанные.Вставить("ДополнительныеДанныеПроверок", Ошибка);
		ПараметрыФормы.ДополнительныеДанные.Вставить("ДоверенностьМЧД", Ошибка.ДополнительныеФайлы); 
		
		ОткрытьФорму("ОбщаяФорма.РасширенноеПредставлениеОшибки",
			ПараметрыФормы, Контекст.Форма,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
			
	КонецЕсли;

КонецПроцедуры

Функция КонтекстДляОбработкиОшибкиРР() Экспорт
	Контекст = Новый Структура;
	Контекст.Вставить("ОповещениеОЗавершении");
	Контекст.Вставить("ЗаголовокПредупреждения", НСтр("ru = 'Ошибка при работе с распределенный реестром доверенностей'"));
	Контекст.Вставить("Форма");
	Возврат Контекст;
КонецФункции

Процедура ВыгрузитьДоверенностиВФайлы(Знач Доверенности) Экспорт
	
	ДляНалоговыхОрганов = МашиночитаемыеДоверенностиФНССлужебныйВызовСервера.ДоверенностиДляНалоговыхОрганов(Доверенности);
	
	Контекст = Новый Структура("Доверенности", Доверенности);
	
	Если ДляНалоговыхОрганов Тогда
		Если Доверенности.Количество() > 1 Тогда
			ТекстВопроса = НСтр("ru = 'Доверенности могут быть использованы и для подписания документов, и для представления в налоговые органы.
				|В каком виде выгрузить файлы доверенностей?'");
		Иначе
			ТекстВопроса = НСтр("ru = 'Доверенность может быть использована и для подписания документов, и для представления в налоговые органы.
				|В каком виде выгрузить файлы доверенности?'");
		КонецЕсли;
		
		Кнопки = Новый СписокЗначений;
		Кнопки.Добавить(Истина, НСтр("ru = 'Для представления в налоговые органы'"));
		Кнопки.Добавить(Ложь, НСтр("ru = 'Только для подписания документов'"));
		
		ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьВыгрузкуДоверенностиВФайл", ЭтотОбъект, Контекст);
		
		ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
		ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
		
		Если Доверенности.Количество() > 1 Тогда
			ПараметрыВопроса.Заголовок = НСтр("ru = 'Выгрузка доверенностей в файлы'");
		Иначе
			ПараметрыВопроса.Заголовок = НСтр("ru = 'Выгрузка доверенности в файлы'");
		КонецЕсли;
		
		СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОписаниеОповещения, ТекстВопроса, Кнопки, ПараметрыВопроса);
	Иначе
		ПродолжитьВыгрузкуДоверенностиВФайл(Новый Структура("Значение", Ложь), Контекст);
	КонецЕсли;

КонецПроцедуры

Процедура ПолучитьДоверенностьИзРеестра(ОповещениеОПолучении, НомерДоверенности, ИННДоверителя) Экспорт
	
	Результат = Новый Структура;
	Результат.Вставить("Ошибка");

	РезультатПолучения = МашиночитаемыеДоверенностиФНССлужебныйВызовСервера.ЗагрузитьДоверенностьИзРеестра(НомерДоверенности, ИННДоверителя);
	Если ЗначениеЗаполнено(РезультатПолучения.Ошибка) Тогда
		КонтекстОшибки = КонтекстДляОбработкиОшибкиРР();
		КонтекстОшибки.ЗаголовокПредупреждения = РезультатПолучения.Ошибка.ЗаголовокОшибки;
		ОбработатьОшибкуВзаимодействияРР(РезультатПолучения.Ошибка, КонтекстОшибки);
		Возврат;
	КонецЕсли; 

	ВыполнитьОбработкуОповещения(ОповещениеОПолучении, РезультатПолучения);
КонецПроцедуры

Процедура ВыгрузитьДоверенностьВФайл(Знач Доверенность) Экспорт
	Если ТипЗнч(Доверенность) <> Тип("Массив") Тогда
		Доверенность = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Доверенность);
	КонецЕсли;
	ВыгрузитьДоверенностиВФайлы(Доверенность);
КонецПроцедуры 

Процедура ПолучитьДоверенностьИзРеестраФНС(ОповещениеОПолучении = Неопределено, НомерДоверенности = Неопределено, ИННДоверителя = Неопределено) Экспорт
	ПараметрыОткрытия = Новый Структура;
	ПараметрыОткрытия.Вставить("НомерДоверенности", НомерДоверенности);
	ПараметрыОткрытия.Вставить("ИННДоверителя", ИННДоверителя);
	ОткрытьФорму("Справочник.МашиночитаемыеДоверенности.Форма.ФормаПолученияДоверенностиИзРеестра", ПараметрыОткрытия, ,
	, , , ОповещениеОПолучении, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

// Продолжение процедуры МашиночитаемыеДоверенностиФНСКлиент.ПроверитьДоверенность.
Процедура ПроверитьДоверенность(Оповещение, Доверенность, ИдентификаторФормы = Неопределено) Экспорт
	
	РезультатПроверкиДоверенности = МашиночитаемыеДоверенностиФНССлужебныйВызовСервера.РезультатПроверкиДоверенности(
		Доверенность, Неопределено, ИдентификаторФормы);
	
	Если ИдентификаторФормы = Неопределено Тогда
		ПослеПолученияРезультатовПроверкиПодписей(РезультатПроверкиДоверенности, Оповещение);
		Возврат;
	КонецЕсли;
	
	ТребуетсяПроверка = Ложь;
	Для Каждого Результат Из РезультатПроверкиДоверенности.РезультатПроверкиПодписей.РезультатыПроверкиПодписей Цикл
		Если Результат.ТребуетсяПроверка Тогда
			ТребуетсяПроверка = Истина;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Если Не ТребуетсяПроверка Тогда
		ПослеПолученияРезультатовПроверкиПодписей(РезультатПроверкиДоверенности, Оповещение);
		Возврат;
	КонецЕсли;

	Контекст = Новый Структура;
	Контекст.Вставить("Оповещение", Оповещение);
	Контекст.Вставить("РезультатПроверкиДоверенности", РезультатПроверкиДоверенности);
	Контекст.Вставить("Индекс", -1);
	Контекст.Вставить("ДанныеДоверенности");
	ПроверитьПодписиЦиклНачало(Контекст);

КонецПроцедуры

// Продолжение процедуры ПроверитьДоверенность.
Процедура ПроверитьПодписиЦиклНачало(Контекст)
	
	Если Контекст.РезультатПроверкиДоверенности.РезультатПроверкиПодписей.РезультатыПроверкиПодписей.Количество() <= Контекст.Индекс + 1 Тогда
		ПослеПолученияРезультатовПроверкиПодписей(Контекст.РезультатПроверкиДоверенности, Контекст.Оповещение);
		Возврат;
	КонецЕсли;
	
	Контекст.Индекс = Контекст.Индекс + 1;
	Элемент = Контекст.РезультатПроверкиДоверенности.РезультатПроверкиПодписей.РезультатыПроверкиПодписей[Контекст.Индекс];
	Если Не Элемент.ТребуетсяПроверка Тогда
		ПроверитьПодписиЦиклНачало(Контекст);
		Возврат;
	КонецЕсли;
	
	Если Контекст.ДанныеДоверенности = Неопределено Тогда
		Контекст.ДанныеДоверенности = ПолучитьИзВременногоХранилища(Элемент.АдресДанныхДоверенности);
	КонецЕсли;
	
	МодульЭлектроннаяПодписьКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектроннаяПодписьКлиент");
	ПараметрыПроверкиПодписи = МодульЭлектроннаяПодписьКлиент.ПараметрыПроверкиПодписи();
	ПараметрыПроверкиПодписи.РезультатВВидеСтруктуры = Истина;
	
	МодульЭлектроннаяПодписьКлиент.ПроверитьПодпись(
		Новый ОписаниеОповещения("ПослеПроверкиПодписи", ЭтотОбъект, Контекст),
		Контекст.ДанныеДоверенности,
		ПолучитьИзВременногоХранилища(Элемент.АдресПодписи),
		Неопределено,
		Элемент.ДатаПодписи, ПараметрыПроверкиПодписи);
	
КонецПроцедуры

// Продолжение процедуры ПроверитьДоверенность.
Процедура ПослеПроверкиПодписи(РезультатПроверкиПодписи, Контекст) Экспорт
	
	СтрокаПодписи = Контекст.РезультатПроверкиДоверенности.РезультатПроверкиПодписей.РезультатыПроверкиПодписей[Контекст.Индекс];
	СтрокаПодписи.Удалить("АдресДанныхДоверенности");
	СтрокаПодписи.Удалить("АдресПодписи");
	Если Не РезультатПроверкиПодписи.ТребуетсяПроверка Тогда
		СтрокаПодписи.ТребуетсяПроверка = РезультатПроверкиПодписи.ТребуетсяПроверка;
		СтрокаПодписи.ПодписьВерна = РезультатПроверкиПодписи.Результат = Истина;
		СтрокаПодписи.РезультатПроверки = РезультатПроверкиПодписи;
		Если ТипЗнч(РезультатПроверкиПодписи.Результат) = Тип("Строка") Тогда
			СтрокаПодписи.ТекстОшибки = РезультатПроверкиПодписи.Результат;
		КонецЕсли;
	КонецЕсли;
	
	ПроверитьПодписиЦиклНачало(Контекст);
	
КонецПроцедуры

// Продолжение процедуры ПроверитьДоверенность.
Процедура ПослеПолученияРезультатовПроверкиПодписей(РезультатПроверкиДоверенности, Оповещение)
	
	Результат = МашиночитаемыеДоверенностиФНССлужебныйКлиентСервер.РезультатПроверкиДоверенности(
		РезультатПроверкиДоверенности);
	ВыполнитьОбработкуОповещения(Оповещение, Результат);

КонецПроцедуры

#КонецОбласти
